#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
#include <stdlib.h>

#ifndef DEFINITIONS_H_
#define DEFINITIONS_H_

/* Definición de códigos de estado */
#define STATUS_OK 0
#define BAD_CALL -1
#define BAD_FILE -2
#define BAD_READ -3

/* Otras definiciones */
#define S_HELP "-h"
#define L_HELP "--help"
#define S_VERSION "-V"
#define L_VERSION "--version"
#define S_BUBBLE "-b"
#define L_BUBBLE "--bubble"
#define S_SHELL "-s"
#define L_SHELL "--sel"
#define SINGLE_ARG 1
#define POS_SINGLE 1
#define POS_INIT_MULTIPLE_ARG 2
#define MODE_RB "rb"
#define MENOR -1
#define MAYOR 1
#define IGUAL 0

/* Macro que evalua si el parametro cad, coincide con el parametro S_FORM o con
L_FORM */
#define OPTION(cad,S_FORM,L_FORM) (((strcmp((cad),(S_FORM))==0 ) || \
				(strcmp((cad),(L_FORM))==0 )) ?(true):(false))

/* Macro que evalua si el codigo pasado por parametro corresponde a algún codigo
de error predefinido */
#define UNSUCCESS_EXECUTION(code) ( ((code)==BAD_CALL)  || \
										((code)==BAD_FILE) || ((code)==BAD_READ))


/* Estructura de argumentos para el proceso de codificacion / decodificacion */
typedef struct t_data{
	FILE* input_file;/*indica el stream de entrada (si es stdin o archivo)*/
	unsigned char** words;/*Array de punteros. contiene todas las palabras de un archivo*/
	int idx;/*indice utilizado para recorrer los parámetros pasados por linea de comando*/
	int size;/*almacena la cantidad de lineas leidas hasta el momento*/
	int line_size;/*almacena el tamaño parcial de la linea en proceso*/
}t_data;


#endif /* DEFINITIONS_H_ */
